#!/bin/bash

# 检查是否以 root 用户运行脚本
if [ "$(id -u)" -ne 0 ]; then
  echo "请以 root 用户运行该脚本."
  exit 1
fi

# 检查是否传入了密码参数
# if [ -z "$1" ]; then
#   echo "请提供密码作为脚本参数."
#   echo "用法: $0 <password>"
#   exit 1
# fi

USERNAME="weihu"
PASSWORD="rBsr1127#cqS3"  # 使用传入的第一个参数作为密码

# 添加 weihu 用户
if id "$USERNAME" &>/dev/null; then
  echo "用户 $USERNAME 已经存在."
else
  useradd "$USERNAME"
  echo "用户 $USERNAME 创建成功."
fi

# 自动设置 weihu 用户密码
echo "$USERNAME:$PASSWORD" | chpasswd
echo "已为用户 $USERNAME 设置密码."

# 禁止 root 用户远程登录
SSHD_CONFIG="/etc/ssh/sshd_config"
if grep -q "^PermitRootLogin" "$SSHD_CONFIG"; then
  sed -i "s/^PermitRootLogin.*/PermitRootLogin no/" "$SSHD_CONFIG"
else
  echo "PermitRootLogin no" >> "$SSHD_CONFIG"
fi

# 重启 SSH 服务以应用配置更改
if systemctl is-active --quiet sshd; then
  systemctl restart sshd
  echo "SSH 服务已重启，root 用户远程登录已禁用."
else
  echo "SSH 服务未运行，请检查 SSH 服务状态."
fi

# 允许 weihu 使用 sudo
if [ -f /etc/sudoers ]; then
  if ! grep -q "^$USERNAME" /etc/sudoers; then
    echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
    echo "已为用户 $USERNAME 配置 sudo 权限."
  else
    echo "用户 $USERNAME 已经有 sudo 权限."
  fi
else
  echo "未找到 sudoers 文件，无法为用户 $USERNAME 配置 sudo 权限."
fi

echo "脚本执行完成."

#############################v2############################
#!/bin/bash

# 检查是否以 root 用户运行脚本
if [ "$(id -u)" -ne 0 ]; then
  echo "错误：必须使用 root 权限运行此脚本" >&2
  exit 1
fi

# 使用安全的密码传递方式
USERNAME="weihu"
PASSWORD="rBsr1127#cqS3"  # 生产环境应改为从安全存储获取

# 1. 用户管理优化
# 检查用户是否存在，不存在则创建
if ! id "$USERNAME" &>/dev/null; then
  # 创建用户并设置主目录和登录 shell
  if ! useradd -m -s /bin/bash "$USERNAME"; then
    echo "错误：无法创建用户 $USERNAME" >&2
    exit 1
  fi
  echo "用户 $USERNAME 创建成功"
else
  echo "用户 $USERNAME 已存在"
fi

# 设置密码（增加错误检查）
if ! echo "$USERNAME:$PASSWORD" | chpasswd; then
  echo "错误：无法为用户 $USERNAME 设置密码" >&2
  exit 1
fi
echo "用户 $USERNAME 密码设置成功"

# 2. SSH 安全配置（增加备份和配置检查）
SSHD_CONFIG="/etc/ssh/sshd_config"
BACKUP_FILE="${SSHD_CONFIG}.bak-$(date +%Y%m%d%H%M%S)"

# 创建配置文件备份
cp "$SSHD_CONFIG" "$BACKUP_FILE" || {
  echo "错误：无法创建备份文件 $BACKUP_FILE" >&2
  exit 1
}
echo "配置文件已备份至：$BACKUP_FILE"

# 安全修改配置
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG"
grep -q '^PermitRootLogin no' "$SSHD_CONFIG" || {
  echo "PermitRootLogin no" >> "$SSHD_CONFIG"
}

# 配置测试
if ! sshd -t -f "$SSHD_CONFIG"; then
  echo "错误：SSH 配置测试失败，正在恢复备份" >&2
  mv -f "$BACKUP_FILE" "$SSHD_CONFIG"
  exit 1
fi

# 安全重启 SSH 服务
if systemctl is-active sshd &>/dev/null; then
  systemctl restart sshd && echo "SSH 服务已重启"
else
  echo "警告：SSH 服务未运行，配置已保存但未生效" >&2
fi

# 3. Sudo 权限配置（使用安全方法）
SUDOERS_ENTRY="$USERNAME ALL=(ALL) NOPASSWD: ALL"
SUDOERS_FILE="/etc/sudoers.d/$USERNAME"

# 使用专用文件代替修改主 sudoers
echo "$SUDOERS_ENTRY" > "$SUDOERS_FILE" && \
chmod 0440 "$SUDOERS_FILE" && \
echo "Sudo 权限已配置" || {
  echo "错误：无法配置 sudo 权限" >&2
  exit 1
}

# 4. 验证配置
echo -e "\n验证配置："
# 检查用户组
id "$USERNAME"
# 检查 sudo 配置
sudo -l -U "$USERNAME"
# 检查 SSH 配置
sshd -T | grep permitrootlogin

echo -e "\n脚本执行完成！重要提示："
echo "1. 请确认当前会话不是通过 root SSH 连接"
echo "2. 请使用新用户 $USERNAME 测试登录和 sudo 权限"
echo "3. 备份文件位置: $BACKUP_FILE"
